# @Time : 2024-10-25 11:15
# @Author : Fioman 
# @Phone : 13149920693
"""
bisect 通过二分查找维持有序序列
bisect_left 用于查找元素在序列中的插入位置,如果有相同的元素,插入到它们的左边,只查找
bisect_right 如果有相同元素,插入到右边 只查找
insort_left (有序序列插入一个元素,保持列表有序行,如果有相同元素,插入左边
insort_right(插入右边)
"""
import bisect

myList = [1, 2, 3, 3, 3, 4, 5]
# myList = tuple(myList) # 元组也是可以的
myList = "".join([str(x) for x in myList])  # 字符串也是可以的
print(myList, type(myList))
position = bisect.bisect_left(myList, str(3))
print(f"postion left:  {position}")
position = bisect.bisect(myList, str(3))  # 默认就是插入右边,就是后面
print(f"postion default: {position}")
position = bisect.bisect_right(myList, str(3))
print(f"postion right: {position}")
print(myList)

# myStr = "abcddddefg"
# print(myStr)
# bisect.insort(myStr, "d") # 字符串不能使用insort,因为insort是调用了insert
# bisect.insort_left(myStr, "d")
# bisect.insort_right(myStr, "d")

mytuple = (1, 2, 3, 3, 3, 4, 5)  # 也不行
print(mytuple)
mytuple = list(mytuple)  # 只能是list
bisect.insort_left(mytuple, 3)
bisect.insort_right(mytuple, 3)
bisect.insort(mytuple, 3)
print(mytuple)

"""
为什么bisect.bisect_left 支持元组,字符串呢,以为这个函数只是通过二分查找去查询,不做插入的操作.
而bisect.insort() 是要插入元素的,所以它只支持列表,因为字符串和元组都没有insert()插入函数
"""
